--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit f193010f37dd3511a585dd3e5c9d56b22c60dde2
Parents : ef977c8
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-22T18:16:52-05:00
feat(flatpak): add script to ensure Flathub remote exists and update build process for Electron Forge
Changes
5 files changed, 49 insertions(+), 2 deletions(-)
Diff
diff --git a/.github/workflows/build-linux-packages.yml b/.github/workflows/build-linux-packages.yml
index edca6a0a..cb7afbe1 100644
--- a/.github/workflows/build-linux-packages.yml
+++ b/.github/workflows/build-linux-packages.yml
@@ -21,6 +21,8 @@ on:
paths:
- "package.json"
- "forge.config.js"
+ - "scripts/electron-forge-local-tmp.js"
+ - "scripts/ensure-flatpak-flathub-remote.sh"
- "scripts/ci/github-build-linux-*.sh"
- ".github/workflows/build-linux-packages.yml"
- ".github/workflows/frontend-build.yml"
@@ -80,8 +82,7 @@ jobs:
- name: Install flatpak runtimes (user scope)
run: |
set -euo pipefail
- flatpak --user remote-add --if-not-exists flathub \
- https://flathub.org/repo/flathub.flatpakrepo
+ bash scripts/ensure-flatpak-flathub-remote.sh
flatpak --user install -y --noninteractive flathub \
org.freedesktop.Platform//25.08 \
org.freedesktop.Sdk//25.08 \
diff --git a/forge.config.js b/forge.config.js
index 35988dee..dc65f228 100644
--- a/forge.config.js
+++ b/forge.config.js
@@ -84,6 +84,22 @@ module.exports = {
config: {
options: {
categories: ["Network"],
+ // electron-installer-flatpak still defaults to zypak v2021.02, which hardcodes
+ // clang++; org.freedesktop.Sdk 25.08 does not ship clang++ on PATH. Match
+ // org.electronjs.Electron2.BaseApp 25.08 (g++ / C++20).
+ modules: [
+ {
+ name: "zypak",
+ sources: [
+ {
+ type: "git",
+ url: "https://github.com/refi64/zypak",
+ tag: "v2025.09",
+ commit: "693a71c5ffa80ec9c9ce2ae03b1ccc493c698e53",
+ },
+ ],
+ },
+ ],
runtime: "org.freedesktop.Platform",
runtimeVersion: "25.08",
sdk: "org.freedesktop.Sdk",
diff --git a/scripts/ci/github-build-linux-flatpak.sh b/scripts/ci/github-build-linux-flatpak.sh
index 855dc33e..f0fecd7d 100755
--- a/scripts/ci/github-build-linux-flatpak.sh
+++ b/scripts/ci/github-build-linux-flatpak.sh
@@ -9,6 +9,8 @@
# - flatpak, flatpak-builder, elfutils (for eu-strip)
# - org.freedesktop.Platform/Sdk//25.08
# - org.electronjs.Electron2.BaseApp//25.08
+# ``electron-forge-local-tmp.js`` registers the Flathub user remote before Forge so
+# ``@malept/flatpak-bundler`` can auto-install those refs when missing.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
diff --git a/scripts/electron-forge-local-tmp.js b/scripts/electron-forge-local-tmp.js
index c375c27d..df0db6ee 100644
--- a/scripts/electron-forge-local-tmp.js
+++ b/scripts/electron-forge-local-tmp.js
@@ -20,6 +20,22 @@ const env = {
const forgeCli = require.resolve("@electron-forge/cli/dist/electron-forge.js");
const args = process.argv.slice(2);
+
+const flatpakForgeTarget =
+ args.includes("@electron-forge/maker-flatpak") ||
+ process.env.FORGE_MAKE_FLATPAK === "1" ||
+ process.env.FORGE_MAKE_FLATPAK === "true";
+if (flatpakForgeTarget) {
+ const ensure = path.join(root, "scripts", "ensure-flatpak-flathub-remote.sh");
+ const pre = spawnSync("bash", [ensure], { cwd: root, stdio: "inherit" });
+ if (pre.status !== 0 && pre.status !== null) {
+ process.exit(pre.status);
+ }
+ if (pre.signal) {
+ process.exit(1);
+ }
+}
+
const result = spawnSync(process.execPath, [forgeCli, ...args], {
cwd: root,
env,
diff --git a/scripts/ensure-flatpak-flathub-remote.sh b/scripts/ensure-flatpak-flathub-remote.sh
new file mode 100644
index 00000000..23a10d9a
--- /dev/null
+++ b/scripts/ensure-flatpak-flathub-remote.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+# flatpak-bundler installs runtimes with flatpak --user and a bare ref; that only works
+# once the Flathub remote exists (see @malept/flatpak-bundler ensureRef).
+set -euo pipefail
+
+if ! command -v flatpak >/dev/null 2>&1; then
+ echo "flatpak is not installed." >&2
+ exit 1
+fi
+
+flatpak --user remote-add --if-not-exists flathub \
+ https://flathub.org/repo/flathub.flatpakrepo
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────